from datetime import datetime
from typing import List, Optional, Union

from pydantic import Field

from core.utils.date_utils import datetime_to_str
from core.utils.pydantic_model import GlobalBaseModel


class UserModel(GlobalBaseModel):
    """
    自定义request Body对象
    """
    user_id: str = Field(default=None, max_length=20, alias='userId')

    user_name: str = Field(default=None, max_length=50, alias='userName')

    friends: List[str] = None
    """
    约束 friends 的类型为 list 类型
    """

    description: Optional[str] = None
    """
    约束 description字段是optional 的，且泛型类型为str
    """

    create_time: Union[datetime, None] = Field(default=None, alias='createTime', title="创建时间",
                                               examples=[datetime_to_str()])
    """
    Union: 是python 内置的 typing 类型，表示这个变量可以支持多种不同的类型，如这里可以为 date 类型，或None类型
    """

    extra: dict = None
    """
        其它扩展字段，使用dict来定义
    """
